package com.yuw.fun;

public class Test02 {

	public static void main(String[] args) {
		test01_main();
		System.out.println("*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+");
		test02_main();
	}

	/**
	 * 按引用(地址)传参
	 */
	private static void test02_main() {
		// 定义个实参
		int[] scores = { 20, 80, 50, 90 };
		System.out.println("在调用子方法sub01之前实参的值为：");
		// 打印数组
		printArr(scores);
		// 调用子方法sub01
		test02_sub01(scores); // 实参scores
		System.out.println("在调用子方法sub01之后实参的值为：");
		// 打印数组
		printArr(scores);
	}

	/**
	 * 子方法
	 * 
	 * @param age
	 *            形参
	 */
	private static void test02_sub01(int[] scores) {
		System.out.println("=======子方法开始========");
		System.out.println("在子方法sub01中形参从实参中获取的值为：");
		// 打印数组
		printArr(scores);
		// 改变形参scores中某一个元素的值
		scores[0] += 1;
		// 重新创建一个数组
		// 因为这里使用new创建了新的地址，形参执行的地址被改变，这样子就不会影响实参
		// int[] arr = new int[]{10,20,30,40};
		// scores = arr;
		System.out.println("在子方法sub01中形参的值改变之后为：");
		// 打印数组
		printArr(scores);
		System.out.println("=======子方法结束========");
	}

	/**
	 * 打印数组的内容
	 * 
	 * @param arr
	 *            数组
	 */
	private static void printArr(int[] arr) {
		for (int i : arr) {
			System.out.print(" " + i);
		}
		// 换行
		System.out.println();
	}

	/**
	 * 按值传参
	 */
	private static void test01_main() {
		// 定义个实参
		int age = 20;
		System.out.println("在调用子方法sub01之前实参的值为：" + age);
		// 调用子方法sub01
		test01_sub01(age); // 实参age
		System.out.println("在调用子方法sub01之后实参的值为：" + age);
	}

	/**
	 * 子方法
	 * 
	 * @param age
	 *            形参
	 */
	private static void test01_sub01(int age) {
		System.out.println("=======子方法开始========");
		System.out.println("在子方法sub01中形参从实参中获取的值为：" + age);
		// 改变形参age的值
		age += 1;
		System.out.println("在子方法sub01中形参的值改变之后为：" + age);
		System.out.println("=======子方法结束========");
	}
}
